home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / AMIGA / AMICUS / AMICUS01.ADF / ABasicStuff / Tools / SpeakIt.bas < prev   
BASIC Source File  |  1985-12-04  |  20KB  |  474 lines

  1. 3     SCNCLR
  2. 5     PRINT STRING$(13,"*");" SPEAK-IT ";STRING$(14,"*")
  3. 7     PRINT"*            Version 1.0            *"
  4. 10    PRINT"*";SPC(35);"*"
  5. 12    PRINT"*  For instructions type ALT{?} and *"
  6. 13    PRINT"*  RETURN  after the prompt >       *"
  7. 14    PRINT"*";SPC(35);"*"
  8. 15    PRINT STRING$(37,"*")
  9. 16    PRINT ""
  10. 17    DIM ARGS%(9),CHAN$(12),PHR$(10)
  11. 19    CHAN$(0)=" CHANNEL 0"
  12. 21    CHAN$(1)=" CHANNEL 1"
  13. 23    CHAN$(2)=" CHANNEL 2"
  14. 25    CHAN$(3)=" CHANNEL 3"
  15. 27    CHAn$(4)=" CHANNELS 0 & 1"
  16. 29    CHAN$(5)=" CHANNELS 0 & 2"
  17. 31    CHAN$(6)=" CHANNELS 3 & 1"
  18. 33    CHAN$(7)=" CHANNELS 3 & 2"
  19. 35    CHAN$(8)=" EITHER LEFT"
  20. 37    CHAN$(9)=" EITHER RIGHT"
  21. 39    CHAN$(10)=" EITHER L&R PAIR"
  22. 41    CHAN$(11)=" ANY SINGLE"
  23. 43    OOR$=" *** OUT OF RANGE ***"
  24. 45    PC$="%"
  25. 51    PC%=ASC(PC$)
  26. 53    Q$="╤"
  27. 55    Q%=ASC(Q$)
  28. 57    QL$="±"
  29. 59    QL%=ASC(QL$)
  30. 61    CR$=CHR$(10)
  31. 63    ARGS%(0)=110
  32. 65    Args%(2)=150
  33. 67    ARGS%(4)=22200
  34. 69    ARGS%(5)=64
  35. 71    ARGS%(6)=10
  36. 73    PK$=TRANSLATE$("WELCOME TO SPEAK IT")
  37. 75    X%=NARRATE("WEHLKUM TUW1 (SPIY6K IH8T).")
  38. 76    CH$="^"
  39. 78    FIL$=" "
  40. 80    FOR X%=0 TO 9
  41. 82    PHR$(X%)="EH5MQPTIY."
  42. 84    NEXT
  43. 100   REM MAIN LOOP
  44. 110   LINE INPUT ">",IN$
  45. 113   IF LEN(IN$)=0 THEN GOTO 275
  46. 115   FC%=ASC(IN$):CC%=0
  47. 120   IF IN$="╤" OR IN$="±" THEN SCNCLR:END:REM QUIT
  48. 125   IF IN$="╨" OR IN$="≡" THEN GOSUB 1200:REM PITCH
  49. 128   IF IN$="╔" OR IN$="Θ" THEN GOSUB 1300:REM INFLECT
  50. 131   IF IN$="╥" OR IN$="≥" THEN GOSUB 1400:REM RATE
  51. 134   IF IN$="╓" OR IN$="÷" THEN GOSUB 1500:REM VOICE
  52. 137   IF IN$="╘" OR IN$="⌠" THEN GOSUB 1600:REM TUNING
  53. 140   IF IN$="╓╒" OR IN$="÷⌡" THEN GOSUB 1700:REM VOL
  54. 143   IF IN$="├╚" OR IN$="πΦ" THEN GOSUB 1800:REM CHANNEL
  55. 146   IF IN$="═" OR IN$="φ" THEN GOSUB 1900:REM MODE
  56. 149   IF IN$="├" OR IN$="π" THEN GOSUB 2000: REM CONTROL
  57. 152   IF IN$="┼─" OR IN$="σΣ" THEN ECH%=15:IR%=-1:CH$="^":CURS%=1:FIL$=" ":GOSUB 3000:GOSUB 900:GOTO 110:REM ED
  58. 155   IF LEN(IN$)=1 AND ASC(IN$)>175 AND ASC(IN$)<185 THEN GOSUB 1150:REM RECALL
  59. 156   IF NOT((FC%=237 OR FC%=205 OR FC%=174 OR FC%=255) AND LEN(IN$)=2) THEN GOTO 161
  60. 157   IN$=RIGHT$(IN$,1)
  61. 158   GOSUB 1100:REM STORE
  62. 159   GOTO 100
  63. 161   IF IN$="»"  OR IN$="┐" THEN GOSUB 300:REM INSTR
  64. 164   IF IN$="»»" OR IN$="┐┐" THEN GOSUB 500:REM ED INSTR
  65. 180   IF FC%=PC% THEN TEXT$="******":PHNM$=RIGHT$(IN$,LEN(IN$)-1):TE%=0
  66. 183   IF FC%<>PC% AND CC%=0 THEN TEXT$=IN$:PHNM$=TRANSLATE$(IN$):TE%=0
  67. 275   GOSUB 4000:REM SPEAK
  68. 277   IF CH$="ñ" THEN GOSUB 3000
  69. 285   GOSUB 900: REM DISPLAY
  70. 290   GOTO 110
  71. 300   REM INSTRUCTION SCREENS
  72. 302   CC%=1
  73. 303   SCNCLR
  74. 304   PRINT"******* SPEAK-IT INSTRUCTIONS *******";CR$
  75. 307   PRINT"Speak-It alows you to manipulate";CR$;"all the variables involved in";CR$;"generating speech with your Amiga."
  76. 310   PRINT"It includes ten storage memories to";CR$;"store phoneme strings in so you can";CR$;"compare alternate implementations.";CR$
  77. 313   Print"The system prompt is a carret >";CR$;CR$;"Type a line of text followed by a";CR$;"carriage return (CR) to have it"
  78. 316   PRINT"translated and spoken.";CR$
  79. 319   PRINT"Type[ % phoneme string CR ] to speak";CR$;"the string exactly as input.";CR$
  80. 322   PRINT"Type ALT{Q} CR  to exit to ABasiC.";CR$
  81. 325   PRINT"Press any key to continue."
  82. 328   GETKEY X$
  83. 331   SCNCLR
  84. 334   PRINT"To alter the values in the array that";CR$;"controls the manner of speaking, type";CR$;"the commands below, followed by CR."
  85. 337   PRINT"{XY} means type the characters XY";CR$;"with the ALT key depressed.";CR$
  86. 340   PRINT"  {P}  To adjust the Pitch";CR$;"  {I}  To alter the Inflection"
  87. 343   PRINT"  {R}  To adjust the rate";CR$;"  {V}  To alter the Voice"
  88. 346   PRINT"  {T}  To adjust the Tuning";CR$;"  {VU} To adjust the VolUme"
  89. 349   PRINT"  {CH} To select the CHannel";CR$;"  {M}  To select the Mode"
  90. 352   PRINT"  {C}  To select the Control mode";CR$;CR$;"  {ED} To activate the phoneme editor"
  91. 353   PRINT"  {??} To get editor instructions";CR$;CR$;"  {?}  To get these instructions";CR$
  92. 356   PRINT"Press any key to continue."
  93. 359   GETKEY X$
  94. 362   SCNCLR
  95. 365   PRINT"To store the current phoneme string";CR$;"in one of the ten memories, type"
  96. 368   PRINT"{Mn},{.n},or{-n} followed by CR or";CR$;"ENTER, where n is a digit from 0 to 9";CR$
  97. 371   PRINT"To recall and speak one of the";CR$;"phoneme memories, type {n} followed"
  98. 374   PRINT"by CR or ENTER, where n is a digit";CR$;"from 0 to 9.  The current phoneme";CR$;"string is lost.";CR$
  99. 377   PRINT"If the phoneme string has been edited";CR$;"after it was translated from the text"
  100. 380   PRINT"string, the text string is shown in";CR$;INVERSE(1);"inverse video";CR$
  101. 383   PRINT"The speaking manner argument array";CR$;"values are shown in ";INVERSE(1);"inverse video"
  102. 386   PRINT"if they are not the default values";CR$;CR$;"Press any key to continue."
  103. 400   getkey X$
  104. 410   return
  105. 500   REM EDITOR INSTRUCTIONS
  106. 501   SCNCLR
  107. 502   PRINT"The Phoneme Editor alows you to edit";CR$;"the current phoneme string in order";CR$;"to improve the pronunciation.";CR$
  108. 504   PRINT"The string is displayed along with a";CR$;"cursor (^) that indicates the present";CR$;"editing point.";CR$
  109. 506   PRINT"The editing mode that is in effect is";CR$;"shown at the bottom of the screen,";CR$;"along with any characters to be";CR$;"inserted or deleted.";CR$
  110. 508   PRINT"In the editor, the commands take";CR$;"effect immediately, without having to";CR$;"press CR. RETURN is a command that"
  111. 510   PRINT"causes the editing action you have";CR$;"specified to modify the string.";CR$
  112. 512   PRINT"Press any key to continue"
  113. 514   GETKEY X$
  114. 519   SCNCLR
  115. 520   PRINT"{XY} means type the characters XY";CR$;"with the ALT key depressed";CR$
  116. 521   PRINT"{Q} To exit to the main menu"
  117. 522   PRINT"Use the left and right cursor control";CR$;"    keys <- -> to move the cursor"
  118. 525   PRINT"BACKSPACE to back-up when editing"
  119. 527   PRINT"DEL To enter the Delete mode. Then";CR$;"    use DEL or -> to lengthen the";CR$;"    string to be deleted by RETURN"
  120. 530   PRINT"{I} To enter the Insert mode. The";CR$;"    string shown at the bottom of";CR$;"    the screen will be inserted";CR$;"    before the character indicated"
  121. 532   PRINT"    by the cursor by pressing RETURN"
  122. 535   PRINT"{R} To enter the Replace mode. The";CR$;"    string shown at the bottom of the";CR$;"    screen will replace the same"
  123. 537   PRINT"    number of characters, starting";CR$;"    at the cursor, by pressing RETURN";CR$
  124. 539   PRINT"Press any key to continue"
  125. 540   GETKEY X$
  126. 541   SCNCLR
  127. 543   PRINT"ESC If you make an error in editing";CR$;"    to get back the previous version"
  128. 546   PRINT"{n} Where n is a digit from 0 to 9";CR$;"    to recall and speak the string";CR$;"    stored in phoneme memory #n. The"
  129. 549   PRINT"    current string is lost. If you";CR$;"    press multiple {n}s, they will";CR$;"    stack up and be spoken in"
  130. 551   PRINT"    sequence, as determined by the";CR$;"    designated synchronization mode"
  131. 554   PRINT"{Mn},{.n},or{-n} Where n is a digit";CR$;"    from 0 to 9 to store the current";CR$;"    phoneme string in memory #n"
  132. 555   PRINT"{?} To get these instructions";CR$
  133. 557   PRINT"You cannot alter the speaking manner";CR$;"argument array from the editor";CR$
  134. 560   PRINT"Press any key to continue"
  135. 561   GETKEY X$
  136. 564   RETURN
  137. 900   REM A SUBROUTINE TO DISPLAY THE SCREEN
  138. 902   SCNCLR
  139. 903   GOSUB 3200:PRINT"":REM SHOW MEMS
  140. 904   PRINT "TEXT=";INVERSE(TE%);"""";TEXT$;"""";CR$
  141. 906   PRINT "PHONEMES=""";PHNM$;"""";CR$
  142. 908   IF ARGS%(0)=110 THEN IV%=0 ELSE IV%=1
  143. 910   IF ARGS%(0)<65 OR ARGS%(0)>320 THEN TAG$=OOR$ ELSE TAG$=""
  144. 912   ARG$=STR$(ARGS%(0))
  145. 914   SP%=5-LEN(ARG$)
  146. 916   PRINT "     Pitch=";INVERSE(IV%);ARG$;SPC(SP%);INVERSE(0);TAG$
  147. 918   IV%=1
  148. 920   IF ARGS%(1)=0 THEN TAG$=" INFLECTED":IV%=0 ELSE IF ARGS%(1)=1 THEN TAG$=" MONOTONE" ELSE TAG$=OOR$
  149. 922   ARG$=STR$(ARGS%(1))
  150. 924   SP%=5-LEN(ARG$)
  151. 926   PRINT ;"Inflection=";INVERSE(IV%);ARG$;SPC(SP%);INVERSE(0);TAG$
  152. 928   IF ARGS%(2)=150 THEN IV%=0 ELSE IV%=1
  153. 930   IF ARGS%(2)<40 OR ARGS%(2)>400 THEN TAG$=OOR$ ELSE TAG$=""
  154. 932   ARG$=STR$(ARGS%(2))
  155. 934   SP%=5-LEN(ARG$)
  156. 936   PRINT "      Rate=";INVERSE(IV%);ARG$;SPC(SP%);INVERSE(0);TAG$
  157. 938   IV%=1
  158. 940   IF ARGS%(3)=0 THEN TAG$=" MALE":IV%=0 ELSE IF ARGS%(3)=1 THEN TAG$=" FEMALE" ELSE TAG$=OOR$
  159. 942   ARG$=STR$(ARGS%(3))
  160. 944   SP%=5-LEN(ARG$)
  161. 946   PRINT "     Voice=";INVERSE(IV%);ARG$;SPC(SP%);INVERSE(0);TAG$
  162. 948   IF ARGS%(4)=22200 THEN IV%=0 ELSE IV%=1
  163. 950   IF ARGS%(4)<5000 OR ARGS%(4)>28000 THEN TAG$=OOR$ ELSE TAG$=""
  164. 952   ARG$=STR$(ARGS%(4))
  165. 954   SP%=5-LEN(ARG$)
  166. 956   PRINT "    Tuning=";INVERSE(IV%);ARG$;SPC(SP%);INVERSE(0);TAG$
  167. 958   IF ARGS%(5)=64 THEN IV%=0 ELSE IV%=1
  168. 960   IF ARGS%(5)<0 OR ARGS%(5)>64 THEN TAG$=OOR$ ELSE TAG$=""
  169. 962   ARG$=STR$(ARGS%(5))
  170. 964   SP%=5-LEN(ARG$)
  171. 966   PRINT "    VolUme=";INVERSE(IV%);ARG$;SPC(SP%);INVERSE(0);TAG$
  172. 968   IF ARGS%(6)=10 THEN IV%=0 ELSE IV%=1
  173. 970   IF ARGS%(6)<0 OR ARGS%(6)>11 THEN TAG$=OOR$ ELSE TAG$=CHAN$(ARGS%(6))
  174. 972   ARG$=STR$(ARGS%(6))
  175. 974   SP%=5-LEN(ARG$)
  176. 976   PRINT "   CHannel=";INVERSE(IV%);ARG$;SPC(SP%);INVERSE(0);TAG$
  177. 978   IV%=1
  178. 980   IF ARGS%(7)=0 THEN TAG$=" SYNCHRONOUS":IV%=0 ELSE IF ARGS%(7)=1 THEN TAG$=" ASYNCHRONOUS" ELSE TAG$=OOR$
  179. 982   ARG$=STR$(ARGS%(7))
  180. 984   SP%=5-LEN(ARG$)
  181. 986   PRINT "      Mode=";INVERSE(IV%);ARG$;SPC(SP%);INVERSE(0);TAG$
  182. 988   IV%=1
  183. 990   IF ARGS%(8)=0 THEN TAG$=" NORMAL":IV%=0 ELSE IF ARGS%(8)=1 THEN TAG$=" STOP"ELSE IF ARGS%(8)=2 THEN TAG$= " OVERRIDE"ELSE TAG$=OOR$
  184. 992   ARG$=STR$(ARGS%(8))
  185. 994   SP%=5-LEN(ARG$)
  186. 996   PRINT"   Control=";INVERSE(IV%);ARG$;SPC(SP%);INVERSE(0);TAG$
  187. 998   RETURN
  188. 1100  REM SAVE STRING
  189. 1105  X%=ASC(IN$)-176
  190. 1110  PHR$(X%)=PHNM$
  191. 1115  CC%=2
  192. 1120  PRINT"STORED IN MEMORY #";STR$(X%)
  193. 1149  RETURN
  194. 1150  REM RECALL STRING
  195. 1155  X%=ASC(IN$)-176
  196. 1160  PHNM$=PHR$(X%)
  197. 1165  TEXT$="PHRASE MEMORY #"+STR$(X%)
  198. 1168  CC%=1
  199. 1171  TE%=0
  200. 1199  RETURN
  201. 1200  REM ADJUST PITCH
  202. 1205  SCNCLR
  203. 1207  CC%=1
  204. 1210  PRINT"********* PITCH ADJUSTMENT **********";CR$
  205. 1214  PRINT"  Enter a value in the range:";cr$;cr$;"    65 Minimum";cr$;"    110 Default";cr$;"    320 Maximum";cr$
  206. 1229  PRINT"  Or:";CR$;CR$;"    ALT(Q) to quit";CR$;"    RETURN alone to say it again";CR$
  207. 1250  INPUT "PITCH=>",ARG$
  208. 1255  IF LEN(ARG$)=0 THEN GOTO 1275
  209. 1257  IF ASC(ARG$)=Q% OR ASC(ARG$)=QL% THEN RETURN
  210. 1260  ARG%=VAL(ARG$)
  211. 1265  IF ARG%<65 OR ARG%>320 THEN GOSUB 4100:GOTO 1200
  212. 1270  ARGS%(0)=ARG%
  213. 1275  REM LOOPEND
  214. 1280  GOSUB 4000: REM SPEAK
  215. 1285  GOTO 1200
  216. 1300  REM INFLECTION ADJUSTMENT
  217. 1302  SCNCLR
  218. 1303  CC%=1
  219. 1305  PRINT"******* INFLECTION ADJUSTMENT *******";CR$
  220. 1310  PRINT"  Enter one of the following:"CR$;CR$;"    0 for inflection (default)";CR$;"    1 for monotone";CR$
  221. 1315  PRINT"  Or:";CR$;CR$;"    ALT(Q) to quit";CR$;"    RETURN alone to say it again";CR$
  222. 1320  INPUT "INFLECTION=>",ARG$
  223. 1325  IF LEN(ARG$)=0 THEN GOTO 1375
  224. 1330  IF ARG$=Q$ OR ARG$=QL$ THEN RETURN
  225. 1335  ARG%=VAL(ARG$)
  226. 1340  IF ARG%<>0 AND ARG%<>1 THEN GOSUB 4100:GOTO 1300
  227. 1345  ARGS%(1)=ARG%
  228. 1375  GOSUB 4000: REM SPEAK
  229. 1380  GOTO 1300
  230. 1390  RETURN
  231. 1400  REM RATE ADJUSTMENT
  232. 1405  SCNCLR
  233. 1407  CC%=1
  234. 1410  PRINT"***** SPEAKING RATE ADJUSTMENT ******",CR$
  235. 1415  PRINT"  Entera value in the range:";CR$;CR$;"    40  Minimum";CR$;"    150 Default";CR$;"    400 Maximum";CR$
  236. 1420  PRINT"  Or:";CR$;"    ALT(Q) to quit";CR$;"    RETURN alone to say it again";CR$
  237. 1425  INPUT "RATE=>",ARG$
  238. 1430  IF LEN(ARG$)=0 THEN GOTO 1475
  239. 1435  IF ARG$=Q$ OR ARG$=QL$ THEN RETURN
  240. 1440  ARG%=VAL(ARG$)
  241. 1445  IF ARG%<40 OR ARG%>400 THEN GOSUB 4100:GOTO 1400
  242. 1450  ARGS%(2)=ARG%
  243. 1475  GOSUB 4000: REM SPEAK
  244. 1480  GOTO 1400
  245. 1500  REM VOICE ADJUSTMENT
  246. 1505  SCNCLR
  247. 1507  CC%=1
  248. 1510  PRINT"********** VOICE SELECTION **********";CR$
  249. 1520  PRINT"  Enter one of the following:";CR$;CR$;"    0 Male (default)";CR$;"    1 Female";CR$
  250. 1525  PRINT"  Or:";CR$;CR$;"    ALT(Q) to quit";CR$;"    RETURN alone to say it again";CR$
  251. 1527  INPUT "VOICE=>",ARG$
  252. 1530  IF LEN(ARG$)=0 THEN GOTO 1575
  253. 1535  IF ARG$=Q$ OR ARG$=QL$ THEN RETURN
  254. 1540  ARG%=VAL(ARG$) 
  255. 1545  IF ARG%<>0 AND ARG%<>1 THEN GOSUB 4100: GOTO 1500
  256. 1550  ARGS%(3)=ARG%
  257. 1575  GOSUB 4000: REM SPEAK
  258. 1580  GOTO 1500
  259. 1600  REM TUNING ADJUSTMENT
  260. 1603  SCNCLR
  261. 1604  CC%=1
  262. 1605  PRINT"********* TUNING ADJUSTMENT *********";CR$;"  Sampling frequency in Hertz";CR$
  263. 1610  PRINT"  Enter a value in the range:";CR$;CR$;"     5000 Minimum";CR$;"    22200 Default";CR$;"    28000 Maximum";CR$
  264. 1615  PRINT"  Or:";CR$;CR$;"    ALT(Q) to quit";CR$;"    RETURN alone to say it again";CR$
  265. 1625  INPUT "TUNING=>",ARG$
  266. 1630  IF LEN(ARG$)=0 THEN GOTO 1675
  267. 1635  IF ARG$=Q$ OR ARG$=QL$ THEN RETURN
  268. 1640  ARG%=VAL(ARG$)
  269. 1645  IF ARG%<5000 OR ARG%>28000 THEN GOSUB 4100:GOTO 1600
  270. 1650  ARGS%(4)=ARG%
  271. 1675  GOSUB 4000:REM SPEAK
  272. 1680  GOTO 1600
  273. 1700  REM VOLUME ADJUSTMENT
  274. 1705  SCNCLR
  275. 1707  CC%=1
  276. 1710  PRINT"********* VOLUME ADJUSTMENT *********";CR$
  277. 1715  PRINT"  Enter a value in the range:";CR$;CR$;"     0 No sound";CR$;"    64 Loudest (default)";CR$
  278. 1720  PRINT"  Or:";CR$;CR$;"    ALT(Q) to quit";CR$;"    RETURN alone to say it again";CR$
  279. 1725  INPUT "VOLUME=>",ARG$
  280. 1730  IF LEN(ARG$)=0 THEN GOTO 1775
  281. 1735  IF ARG$=Q$ OR ARG$=QL$ THEN RETURN
  282. 1740  ARG%=VAL(ARG$)
  283. 1745  IF ARG%<0 OR ARG%>64 THEN GOSUB 4100:GOTO 1700
  284. 1750  ARGS%(5)=ARG%
  285. 1775  GOSUB 4000:REM SPEAK
  286. 1780  GOTO 1700
  287. 1800  REM CHANNEL
  288. 1802  SCNCLR
  289. 1803  CC%=1
  290. 1805  PRINT"******** CHANNEL ASSIGNMENT *********";CR$
  291. 1810  PRINT" Enter one of the following:";CR$;CR$;"    0  Channel 0";CR$;"    1  Channel 1";CR$;"    2  Channel 2"
  292. 1812  PRINT"    3  Channel 3";CR$;"    4  Cannels 0 & 1";CR$;"    5  Channels 0 & 2";CR$;"    6  Channels 3 & 1"
  293. 1814  PRINT"    7  Channels 3 & 2";CR$;"    8  Either available left channel";CR$;"    9  Either available right channel"
  294. 1816  PRINT"    10 Either L/R pair (default)";CR$;"    11 Any available single channel"CR$
  295. 1818  PRINT"    ALT(Q) to quit";CR$;"    RETURN alone to say it again";CR$
  296. 1825  INPUT "CHANNEL=>",ARG$
  297. 1830  IF LEN(ARG$)=0 THEN GOTO 1875
  298. 1835  IF ARG$=Q$ OR ARG$=QL$ THEN RETURN
  299. 1840  ARG%=VAL(ARG$)
  300. 1845  IF ARG%<0 OR ARG%>11 THEN GOSUB 4100:GOTO 1800
  301. 1850  ARGS%(6)=ARG%
  302. 1875  GOSUB 4000:REM SPEAK
  303. 1880  GOTO 1800
  304. 1900  REM SYNCH MODE
  305. 1905  SCNCLR
  306. 1907  CC%=1
  307. 1910  PRINT"**** SYNCHRONIZATION MODE SELECT ****";CR$
  308. 1915  PRINT"  Enter one of the following:";CR$;CR$;"    0 Synchronous speech (default)";CR$;"    1 Asynchronous speech";CR$
  309. 1920  PRINT"  Or:";CR$;CR$;"    ALT(Q) to quit";CR$;"    RETURN alone to say it again";CR$
  310. 1925  INPUT "MODE=>",ARG$
  311. 1930  IF LEN(ARG$)=0 THEN GOTO 1975
  312. 1935  IF ARG$=Q$ OR ARG$=QL$ THEN RETURN
  313. 1940  ARG%=VAL(ARG$)
  314. 1945  IF ARG%<0 OR ARG%>1 THEN GOSUB 4100:GOTO 1900
  315. 1950  ARGS%(7)=ARG%
  316. 1975  GOSUB 4000:REM SPEAK
  317. 1980  GOTO 1900
  318. 2000  REM CONTROL SELECTION
  319. 2005  SCNCLR
  320. 2007  CC%=1
  321. 2010  PRINT"********* CONTROL SELECTION *********";CR$
  322. 2015  PRINT"  Enter one of the following:";CR$;CR$;"    0 Process normally (default)";CR$;"    1 Stop speech processing";CR$;"    2 Override processing";CR$
  323. 2020  PRINT"  Or:";CR$;CR$;"    ALT(Q) to quit";CR$;"    RETURN alone to say it again";CR$
  324. 2025  INPUT "CONTROL=>",ARG$
  325. 2030  IF LEN(ARG$)=0 THEN GOTO 1975
  326. 2035  IF ARG$=Q$ OR ARG$=QL$ THEN RETURN
  327. 2040  ARG%=VAL(ARG$)
  328. 2045  IF ARG%<0 OR ARG%>2 THEN GOSUB 4100:GOTO 2000
  329. 2050  ARGS%(8)=ARG%
  330. 2075  GOSUB 4000:REM SPEAK
  331. 2080  GOTO 2000
  332. 3000  REM EDITOR
  333. 3001  SCNCLR
  334. 3002  PRINT"********** PHONEME EDITOR ***********"
  335. 3010  OTE%=1:OLD$=""
  336. 3029  GOSUB 3200:REM SHOW MEMS
  337. 3033  IF CH$="ñ" THEN PRINT"      >>PHONEME ERROR AT BUG<<" ELSE PRINT" "
  338. 3035  PRINT""
  339. 3040  REM DISPLAY PHONEMES AND CURSOR
  340. 3043  IF CURS%>LEN(PHNM$)+1 THEN CURS%=LEN(PHNM$)+1
  341. 3046  CURS$=STRING$(CURS%-1," ")+CH$+STRING$(LEN(PHNM$)-CURS%," ")
  342. 3049  PH$=PHNM$
  343. 3052  OUT$=LEFT$(PH$,37)
  344. 3055  PRINT OUT$
  345. 3058  IF LEN(PH$)-37>0 THEN PH$=RIGHT$(PH$,LEN(PH$)-37) ELSE PH$=""
  346. 3061  OUT$=LEFT$(CURS$,37)
  347. 3064  PRINT OUT$
  348. 3067  IF LEN(CURS$)-37>0 THEN CURS$=RIGHT$(CURS$,LEN(CURS$)-37) ELSE CURS$=""
  349. 3068  IF LEN(CURS$)<>0 THEN GOTO 3052
  350. 3069  PRINT AT (1,21);SPC(37)
  351. 3070  IF IR%=-1 THEN PRINT AT(1,21);"INSERT------->" ELSE PRINT AT(1,21);"REPLACE WITH->"
  352. 3072  BEG%=CURS%
  353. 3074  ECH%=15:SIZ%=0:ES$=""
  354. 3076  CC%=1
  355. 3100  REM EDIT LOOP
  356. 3110  GETKEY IN$
  357. 3115  IF IN$=Q$ OR IN$=QL$ THEN RETURN
  358. 3120  IF IN$<>CHR$(155) THEN GOTO 3135
  359. 3122  GET IN$
  360. 3124  IF IN$="C" THEN GOTO 3300:REM ->
  361. 3126  IF IN$="D" THEN GOTO 3350:REM <-
  362. 3135  IF IN$=CHR$(127) THEN GOTO 3400:REM DELETE
  363. 3137  IF IN$=CHR$(13) THEN GOTO 3500:REM RETURN
  364. 3140  IF IN$="╔" OR IN$="Θ" THEN GOTO 3800:REM INSERT
  365. 3143  IF IN$="╥" OR IN$="≥" THEN GOTO 3900:REM REPLACE
  366. 3146  IF IN$=CHR$(8) THEN GOTO 3600:REM BS
  367. 3147  IF IN$="»" OR IN$="┐" THEN GOSUB 500:GOTO 3001:REM INST
  368. 3148  IF IN$=CHR$(27) THEN GOTO 3650: REM ESC
  369. 3149  IF IN$<>CHR$(237) AND IN$<>CHR$(205) AND IN$<>CHR$(174) AND IN$<>CHR$(255) THEN GOTO 3152
  370. 3150  GETKEY IN$
  371. 3151  IF ASC(IN$)>175 AND ASC(IN$)<186 THEN GOSUB 1100:GOTO 3100:REM STORE
  372. 3152  IF ASC(IN$)>175 AND ASC(IN$)<186 THEN GOSUB 1150:GOSUB 4000:GOTO 3000:REM RECALL
  373. 3190  ES$=ES$+IN$
  374. 3192  SIZ%=SIZ%+1
  375. 3194  PRINT AT(ECH%,21);IN$
  376. 3196  ECH%=ECH%+1
  377. 3199  goto 3100
  378. 3200  REM DISPLAY MEMORIES
  379. 3205  X$="MEMORIES USED ╗"
  380. 3210  FOR X%=0 TO 9
  381. 3215  IF PHR$(X%)="EH5MQPTIY." THEN X$=X$+"  " ELSE X$=X$+" "+STR$(X%)
  382. 3220  NEXT
  383. 3225  PRINT X$
  384. 3230  RETURN
  385. 3300  REM ->
  386. 3305  IF CURS%=255 OR CURS%=LEN(PHNM$)+1 THEN GOTO 3100
  387. 3315  PRINT AT (((CURS%-1) MOD 37)+1,6+2*FIX((CURS%-1) / 37));FIL$
  388. 3320  PRINT AT ((CURS% MOD 37)+1,6+2*FIX(CURS%/37));CH$
  389. 3325  CURS%=CURS%+1
  390. 3328  IF CH$<>"╗" THEN BEG%=CURS%:GOTO 3100
  391. 3330  TMP$=MID$(PHNM$,CURS%-1,1)
  392. 3333  SIZ%=SIZ%+1
  393. 3336  PRINT AT (ECH%,21);TMP$
  394. 3339  ECH%=ECH%+1
  395. 3345  GOTO 3100
  396. 3350  REM <-
  397. 3353  IF CH$="╗" THEN GOTO 3100
  398. 3356  IF CURS%<=1 THEN GOTO 3100
  399. 3359  CURS%=CURS%-1:BEG%=CURS%
  400. 3362  PRINT AT (((CURS%-1) MOD 37)+1,6+2*FIX((CURS%-1) / 37));CH$
  401. 3365  PRINT AT ((CURS% MOD 37)+1,6+2*FIX(CURS%/37));" "
  402. 3368  GOTO 3100
  403. 3400  REM DELETE HANDLER
  404. 3402  IF SIZ%<>0 THEN GOTO 3300
  405. 3403  CH$="╗"
  406. 3405  FIL$="*"
  407. 3407  BEG%=CURS%
  408. 3409  SIZ%=1
  409. 3410  PRINT AT(1,21);SPC(37)
  410. 3411  PRINT AT(1,21);"DELETE------->"
  411. 3413  ECH%=15
  412. 3420  GOTO 3300
  413. 3500  REM CR HANDLER
  414. 3502  IF SIZ%<>0 THEN OTE%=TE%:TE%=1:OLD$=PHNM$
  415. 3503  IF CH$<>"╗" THEN GOTO 3520
  416. 3506  PHNM$=LEFT$(PHNM$,BEG%-1)+RIGHT$(PHNM$,LEN(PHNM$)-CURS%+1)
  417. 3508  CURS%=CURS%-SIZ%+1
  418. 3510  CH$="^":FIL$=" ":SIZ%=0
  419. 3512  GOTO 3590
  420. 3520  IF IR%<>-1 THEN GOTO 3530
  421. 3523  PHNM$=LEFT$(PHNM$,CURS%-1)+ES$+RIGHT$(PHNM$,LEN(PHNM$)-CURS%+1)
  422. 3526  ES$="":SIZ%=0:ECH%=15
  423. 3529  GOTO 3590
  424. 3530  PHNM$=LEFT$(PHNM$,BEG%-1)+ES$+RIGHT$(PHNM$,LEN(PHNM$)-BEG%-SIZ%+1)
  425. 3532  CURS%=CURS%+SIZ%:ES$="":SIZ%=0:BEG%=CURS%:ECH%=15
  426. 3590  X%=NARRATE(PHNM$,ARGS%())
  427. 3592  IF X%=0 THEN CH$="^" ELSE CURS%=X% :GOSUB 4020
  428. 3599  GOTO 3001
  429. 3600  REM BS
  430. 3606  IF SIZ%<1 THEN GOTO 3100
  431. 3608  SIZ%=SIZ%-1:ECH%=ECH%-1
  432. 3609  PRINT AT (ECH%,21);" "
  433. 3615  ES$=LEFT$(ES$,SIZ%)
  434. 3620  IF CH$<>"╗" THEN GOTO 3100
  435. 3623  CURS%=CURS%-1
  436. 3626  PRINT AT (((CURS%-1) MOD 37)+1,6+2*FIX((CURS%-1)/37));CH$
  437. 3629  PRINT AT ((CURS% MOD 37)+1,6+2*FIX(CURS%/37));" "
  438. 3649  GOTO 3100
  439. 3650  REM ESCAPE HANDLER
  440. 3653  X%=OTE%
  441. 3656  OTE%=TE%
  442. 3659  TE%=X%
  443. 3662  PK$=OLD$
  444. 3665  OLD$=PHNM$
  445. 3668  PHNM$=PK$
  446. 3671  GOTO 3001
  447. 3800  REM INSERT HANDLER
  448. 3803  IR%=-1:ES$="":SIZ%=0
  449. 3806  ECH%=15
  450. 3807  PRINT AT(1,21);SPC(37)
  451. 3809  PRINT AT(1,21);"INSERT------->"
  452. 3812  CH$="^"
  453. 3890  GOTO 3100
  454. 3900  REM REPLACE HANDLER
  455. 3903  PRINT AT(1,21);SPC(37)
  456. 3905  PRINT AT(1,21);"REPLACE WITH->"
  457. 3910  ES$=""
  458. 3913  ECH%=15
  459. 3916  SIZ%=0
  460. 3918  CH$="^"
  461. 3920  IR%=0
  462. 3950  GOTO 3100
  463. 4000  REM SPEAKS A PHONEME STRING
  464. 4005  CURS%=NARRATE(PHNM$,ARGS%())
  465. 4010  IF CURS%=0 THEN CH$="^":RETURN
  466. 4020  X%=NARRATE("IHT (DAH3Z NAA4T) MEYK SEH4NS.")
  467. 4025  CH$="ñ"
  468. 4030  PE%=-1
  469. 4050  RETURN
  470. 4100  REM OUT OF BOUNDS MESSAGE
  471. 4105  PK$="DHAET IHZ AW8T (AHV BAW4NDZ). YUW MAHST RIY5QXEH3NTER AH VAE3LYUW3 (IH4N REY3NDJ)."
  472. 4110  X%=NARRATE(PK$)
  473. 4120  RETURN
  474.